package org.yelongframework.excel.poi.sheet;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.yelongframework.excel.poi.row.DefaultPOIExcelRow;
import org.yelongframework.excel.poi.row.POIExcelRow;
import org.yelongframework.excel.poi.workbook.POIExcelWorkbook;
import org.yelongframework.excel.row.ExcelRow;

/**
 * 默认实现
 * 
 * @since 1.0.0
 */
public class DefaultPOIExcelSheet extends AbstractPOIExcelSheet {

	// ==================================================构造器==================================================

	/**
	 * @param workbook 工作薄
	 * @param sheet    工作表
	 */
	public DefaultPOIExcelSheet(POIExcelWorkbook workbook, Sheet sheet) {
		super(workbook, sheet);
	}

	// ==================================================行==================================================

	@Override
	public POIExcelRow getRow(int rowIndex) {
		Row row = getSheet().getRow(rowIndex);
		return null == row ? null : new DefaultPOIExcelRow(this, row);
	}

	@Override
	public List<ExcelRow> getRowList() {
		int firstRowNum = getFirstRowNum();
		int lastRowNum = getLastRowNum();
		if (firstRowNum == lastRowNum) {
			return Collections.emptyList();
		}
		List<ExcelRow> excelRowList = new ArrayList<>();
		for (int i = firstRowNum; i <= lastRowNum; i++) {
			excelRowList.add(getRow(i));
		}
		return excelRowList;
	}

	// ==================================================行数==================================================

	@Override
	public int getFirstRowNum() {
		return getSheet().getFirstRowNum();
	}

	@Override
	public int getLastRowNum() {
		return getSheet().getLastRowNum();
	}

	// ==================================================复制行==================================================

	@Override
	public void copyRows(int beginRowIndex, int endRowIndex, int position) {
		getWorkbook().getPOIExcelSupport().copyRows(getSheet(), getSheet(), beginRowIndex, endRowIndex, position);
	}

	// ==================================================设置值==================================================

	@Override
	public void setValue(int rowIndex, int columnIndex, String value) {
		Row row = getSheet().getRow(rowIndex);
		if (null == row) {
			row = getSheet().createRow(rowIndex);
		}
		Cell cell = row.getCell(columnIndex);
		if (null == cell) {
			cell = row.createCell(columnIndex);
		}
		cell.setCellValue(value);
	}

	@Override
	public void setValue(int rowIndex, int columnIndex, Object value) {
		Row row = getSheet().getRow(rowIndex);
		if (null == row) {
			row = getSheet().createRow(rowIndex);
		}
		Cell cell = row.getCell(columnIndex);
		if (null == cell) {
			cell = row.createCell(columnIndex);
		}
		cell.setCellValue(null == value ? null : value.toString());
	}

}
